package georeduy.dao;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

import georeduy.clases.CheckIn;
import georeduy.clases.Empresa;
import georeduy.clases.SitioInteres;
import georeduy.clases.Usuario;
import georeduy.dao.interfaces.ICheckinDAO;
import georeduy.dao.interfaces.IUsuarioDAO;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;



@Stateless(name = "CheckinDAO", mappedName = "GeoRed.uy-GeoRed.uy-JPA-CheckinDAO")
public class CheckinDAO implements  ICheckinDAO
{

    @PersistenceContext(unitName="Geored.uy-JPA")
    private EntityManager em;
    
    @EJB
    private IUsuarioDAO usuDAO;

    public CheckinDAO() {   }
 
    public CheckIn persistCheckIn(CheckIn checkIn) {
        em.persist(checkIn);
        return checkIn;    }

    
    public CheckIn mergeCheckIn(CheckIn checkIn) {
        return em.merge(checkIn);    }

 
    public void removeCheckIn(CheckIn checkIn) {
        checkIn = em.find(CheckIn.class, checkIn.getId());
        em.remove(checkIn);    }
    
    public  CheckIn FindCheckIn(Integer id) {		
		CheckIn e = em.find(CheckIn.class, id);		
		return e;
	}
	@Override
	public int cantidadCheckInxSitio(String sitio, Date comienzo, Date fin)
	{
		String consulta = "SELECT COUNT(c) from CheckIn c WHERE c.lugar = :lugar " +
							"AND c.fecha >= :comienzo AND c.fecha <= :fin";	
		
		Query query = em.createQuery(consulta);
		query.setParameter("lugar", sitio);
		query.setParameter("comienzo", comienzo);
		query.setParameter("fin", fin);
		return (Integer) query.getSingleResult();
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<CheckIn> listarCheckInsPorSitio(String nombreSitio)
	{
    	Query q = em.createQuery("SELECT c FROM CheckIn c WHERE lugar = :lugar");
    	SitioInteres s = em.find(SitioInteres.class, nombreSitio);
    	q.setParameter("lugar", s);
    	return q.getResultList();
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<CheckIn> listarCheckInsPorUsuario(String nick)
	{
    	Query q = em.createQuery("SELECT c FROM CheckIn c WHERE usuario = :usuario");
    	Usuario u = usuDAO.findByName(nick);
    	q.setParameter("usuario", u);
    	return q.getResultList();
	}

}
